package com.jqq.api.transactionnew;

import com.jqq.api.utils.JdbcUtils;
import com.jqq.api.utils.JdbcUtilsV2;
import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * @author 姬倩倩
 * @version 1.0
 * 银行卡业务方法，调用dao方法
 */
public class BankService {

    @Test
    public void start() throws Exception {
        //qq给summer转500元，qq减钱，summer加钱
        transfer("summer","qq",500);
    }

    /**
     * TODO:
     *  事务添加是在业务方法中！
     *  利用try catch代码块，开启事务和提交事务，和事务回滚
     *  将connection传入dao层即可，dao只负责使用，不用close
     *
     * @param addAccount
     * @param subAccount
     * @param money
     * @throws Exception
     */

    public void transfer(String addAccount, String subAccount, int money) throws Exception {
        BankDao bankDao = new BankDao();

        //一个事务的最基本要求，必须是同一个连接对象 connection
        //一个转账方法 属于一个事务(加钱 减钱)

        Connection connection = JdbcUtilsV2.getConnection();
        try {
            //开启事务
            connection.setAutoCommit(false);//关闭事务自动提交

            //执行数据库动作
            bankDao.add(addAccount, money);
            System.out.println("---------");
            bankDao.sub(subAccount, money);

            //事务提交
            connection.commit();
        } catch (Exception e) {
            //事务回滚
            connection.rollback();

            //抛出
            throw e;
        } finally {
            JdbcUtilsV2.freeConnection();
        }



    }
}
